@Luminary
2年前 提问
1个回答

nftables与iptables的主要区别有哪些

X0_0X
2年前

nftables与iptables的主要区别如下:

  • 语法不同:iptables的命令行工具使用getopt_long()解析命令,其中,命令是由两个横杠(–)或一个横杠(-)构成,例如-p tcp–dport。在这方面,nftables将使用更好、更直观、更紧凑的语法。

  • 表和链完全可配置:在nftables中,表是没有特定语义的链容器。请注意,iptables附带了具有预定义数量的基链的表,用户只能选择是与否。因此,即使只需要其中一个链,也会注册所有链;即使根本没有添加任何规则,未使用的基链也会损害性能。使用nftables这种新方法,用户可以根据自己的设置注册所需的链。此外,用户还可以按照需要的方式使用链优先级对管道建模,并为表和链选择任何名称。

  • 不再区分匹配和目标:在nftables中,表达式是规则的基本构建块,因此规则基本上是从左到右线性计算表达式的组合:如果第一个表达式匹配,则评估下一个表达式,以此类推,直到达到作为规则一部分的最后一个表达式。表达式可以匹配某些特定的有效负载字段,例如数据包、流元数据和任何操作。

  • 简化的双栈IPv4/IPv6管理:通过新的inet系列,允许用户注册时可以看到IPv4和IPv6流量的基链。因此,用户不再需要依赖脚本来复制规则集。

  • 通用集和地图基础设施:这种新的基础架构紧密集成到nftables核心中,它允许高级配置,如字典、映射和间隔来实现面向性能的数据包分类。最重要的是,用户可以使用任何受支持的过滤器对流量进行分类。

  • 支持连接:从Linux内核4.1开始,用户可以连接几个键并将它们与字典和映射组合在一起。

  • 没有内核升级的新支持协议:内核升级是一项耗时且烦琐的任务,特别是如果用户必须在网络中维护多个单一防火墙,出于稳定性原因,使用者通常使用较旧的Linux内核版本。使用虚拟机运行nftable的方式,用户可以不用这样升级来支持新协议,相对简单的nft用户空间软件更新足以支持新协议。

  • 目标数量不同:在nftables中,可以在一个规则中指定多个目标;但是在iptables中,用户只能指定一个目标,这是用户通过跳转到自定义链来解决的长期限制,其代价是使规则集结构稍微复杂一些。

  • 有无计数器:在iptables中,每个链和规则没有内置计数器;但在nftables中,这些链和规则是可选的,因此可以按需启用计数器,更好地支持动态规则集更新。